package com.czk.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author:ChenZhangKun
 * @Date: 2021/12/9 17:02
 */
object AggreateByKey {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(("a", 1), ("a", 2), ("a", 3), ("a", 4),("b",5)), 2)
    // aggregateByKey函数柯里化
    // 有两个参数列表
    // 第一个参数为初始值
    // 第二个参数需要传递两个参数
    // 第一个表示分区内计算规则
    // 第二个表示分区间计算规则
    rdd.aggregateByKey(0)(
      // 分区内计算规则
      (x, y) => math.max(x, y),
      // 分区间计算规则
      (x, y) => x + y
      // 6 2+4 第一个分区两个最大值为2 第二个分区最大值为4 2+4=6 结果（a，6）
    ).collect().foreach(println)

  }
}
